package utils

import (
	"com.wangzhumo.lottery/datasource"
	"fmt"
	"log"
)

// 获取一个用户锁的key
func getUserLockKey(uid int) string  {
	return fmt.Sprintf("lucky_user_lock_%d",uid)
}

// LockUser  用户锁 - 加锁
// http://doc.redisfans.com/string/set.html
// 命令 SET resource-name anystring NX EX max-lock-time
// 是一种在 Redis 中实现锁的简单方法。
// EX second ：设置键的过期时间为 second 秒。 SET key value EX second 效果等同于 SETEX key second value 。
// NX 只在键不存在时，才对键进行设置操作。 SET key value NX 效果等同于 SETNX key value
func LockUser(uid int) bool{
	userLockKey := getUserLockKey(uid)
	redisConn := datasource.InstanceRedis()
	// 设置一个3秒的锁，3秒后自动过期释放
	ok, err := redisConn.Do("SET", userLockKey, 1, "EX", 3, "NX")
	if ok == "OK" {
		return true
	}
	if err != nil {
		log.Println(err)
		return false
	}
	return false
}

// UnLockUser 用户锁 - 取消锁
func UnLockUser(uid int) bool{
	userLockKey := getUserLockKey(uid)
	redisConn := datasource.InstanceRedis()
	reply, err := redisConn.Do("DEL", userLockKey)
	if reply == "OK" {
		return true
	}
	if err != nil {
		log.Println(err)
		return false
	}
	return false
}